#include"adc.h"


void adc1_init(void)
{
    //开启时钟
    RCC->APB2ENR|=RCC_APB2ENR_ADC1EN;
    //开分频 72M分频成
    // RCC->CFGR|=RCC_CFGR_ADCPRE_1;
    // RCC->CFGR&=~RCC_CFGR_ADCPRE_0;
    RCC->CFGR|=RCC_CFGR_ADCPRE_DIV6;

    RCC->APB2ENR|=RCC_APB2ENR_IOPCEN;;

    //配置GPIO PC0  模拟输入 00  00
    GPIOC->CRL&=~GPIO_CRL_CNF0;
    GPIOC->CRL&=~GPIO_CRL_MODE0;


    //3.开始配置adc,第一步
    //右对齐
    ADC1->CR2&=~ADC_CR2_ALIGN;
    //3.1关闭扫描模式（因为只有一个采集）
    ADC1->CR1&=~ADC_CR1_SCAN;
    //3.2开启循环（循环接收一个）
    ADC1->CR2|=ADC_CR2_CONT;

    //配置通道
    //1.采样事件周期001
    ADC1->SMPR1|=ADC_SMPR1_SMP10_0;
    ADC1->SMPR1&=~ADC_SMPR1_SMP10_1;
    ADC1->SMPR1&=~ADC_SMPR1_SMP10_2;

    //配置通道个数
    ADC1->SQR1&=~ADC_SQR1_L;

    //将通道10保存到通道中的第一位
    ADC1->SQR3&=~ADC_SQR3_SQ1;
    ADC1->SQR3|=10;


    //最后配置软件触发方式
    ADC1->CR2|=ADC_CR2_EXTTRIG;
    ADC1->CR2|=ADC_CR2_EXTSEL;
    
}

void adc1_start(void)
{
    ADC1->CR2|=ADC_CR2_ADON;

    ADC1->CR2|=ADC_CR2_CAL;
    
    while (ADC1->CR2 & ADC_CR2_CAL)
    {
        
    }

    ADC1->CR2|=ADC_CR2_SWSTART;

    while ((ADC1->SR & ADC_SR_EOC)==0)
    {
       
    }

}

double adc_value(void)
{
    return 3.3*(ADC1->DR)/4095;
}


